package simple.string;

/**
 * <a href="https://leetcode.cn/problems/reverse-only-letters/">917. 仅仅反转字母</a>
 * 给你一个字符串 s ，根据下述规则反转字符串：
 * 所有非英文字母保留在原有位置。
 * 所有英文字母（小写或大写）位置反转。
 * 返回反转后的 s 。
 * 示例 1：
 *   输入：s = "ab-cd"
 *   输出："dc-ba"
 * 示例 2：
 *   输入：s = "a-bC-dEf-ghIj"
 *   输出："j-Ih-gfE-dCba"
 * 示例 3：
 *   输入：s = "Test1ng-Leet=code-Q!"
 *   输出："Qedo1ct-eeLg=ntse-T!"
 * 提示
 *   1 <= s.length <= 100
 *   s 仅由 ASCII 值在范围 [33, 122] 的字符组成
 *   s 不含 '\"' 或 '\\'
 * @author 刘学松
 * @date 2023-06-30 10:04
 */
public class 仅仅反转字母 {
    public String reverseOnlyLetters(String s) {
        char[] chars = s.toCharArray();
        int left = 0, right = chars.length - 1;
        while (left < right) {
            while (left < right && !Character.isLetter(chars[left])) {
                ++left;
            }
            while (left < right && !Character.isLetter(chars[right])) {
                --right;
            }
            if (left < right) {
                char temp = chars[left];
                chars[left] = chars[right];
                chars[right] = temp;
            }
            ++left;
            --right;
        }
        return new String(chars);
    }
}
